home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_200 / 248_01 / file.c < prev    next >
Text File  |  1989-08-16  |  2KB  |  86 lines

  1. /*    FILE:    File handling for MicroSPELL 1.0
  2.         Spell Checker and Corrector
  3.  
  4.         (C)opyright May 1987 by Daniel Lawrence
  5.         All Rights Reserved
  6. */
  7.  
  8. #include    <stdio.h>
  9. #include    "dopt.h"
  10. #include    "dstruct.h"
  11. #include    "ddef.h"
  12. #include    "dpath.h"
  13.  
  14. /*    popen():    open a file for read, looking down the path */
  15.  
  16. FILE *popen(file)
  17.  
  18. char *file;    /* file name to open */
  19.  
  20. {
  21.     char *flook();
  22.  
  23.     return(fopen(flook(file), "r"));
  24. }
  25.  
  26. /*    Look up the existance of a file along the normal or PATH
  27.     environment variable. Look first in the HOME directory if
  28.     asked and possible
  29. */
  30.  
  31. char *flook(fname)
  32.  
  33. char *fname;    /* base file name to search for */
  34.  
  35. {
  36.     register char *path;    /* environmental PATH variable */
  37.     register char *sp;    /* pointer into path spec */
  38.     register int i;        /* index */
  39.     register FILE *fp;    /* trial fp */
  40.     static char fspec[NSTRING];    /* full path spec to search */
  41.     char *getenv();
  42.  
  43. #if    ((MSDOS) & (LATTICE | AZTEC | MSC)) | V7 | USG | BSD
  44.  
  45.     /* get the PATH variable */
  46.     path = getenv("PATH");
  47.     if (path != NULL)
  48.         while (*path) {
  49.  
  50.             /* build next possible file spec */
  51.             sp = fspec;
  52.             while (*path && (*path != PATHCHR))
  53.                 *sp++ = *path++;
  54.             *sp++ = '/';
  55.             *sp = 0;
  56.             strcat(fspec, fname);
  57.  
  58.             /* and try it out */
  59.             fp = fopen(fspec, "r");
  60.             if (fp != NULL) {
  61.                 fclose(fp);
  62.                 return(fspec);
  63.             }
  64.  
  65.             if (*path == PATHCHR)
  66.                 ++path;
  67.         }
  68. #endif
  69.  
  70.     /* look it up via the old table method */
  71.     for (i=2; i < NPNAMES; i++) {
  72.         strcpy(fspec, pathname[i]);
  73.         strcat(fspec, fname);
  74.  
  75.         /* and try it out */
  76.         fp = fopen(fspec, "r");
  77.         if (fp != NULL) {
  78.             fclose(fp);
  79.             return(fspec);
  80.         }
  81.     }
  82.  
  83.     /* return the original...hope it is in the current directory */
  84.     return(fname);
  85. }
  86.